今天是最後一天寫扣了,前幾天已經把功能都做完,今天只修一些部署會用到的小地方
之前在 Day10-替換頁面中的網址 中有把兩個變數抽出來:upstreamURL
是 Github 網址、phishURL
是我們釣魚網站的網址,要取代 HTML 網址時就直接用這兩個變數把 upstreamURL
取代成 phishURL
,這樣使用者就不會被倒回真正的 Github
const (
upstreamURL = "https://github.com"
phishURL = "http://localhost:8080"
)
但現在有個問題,因為上線後網址會變成 https://phish-github.com
,不再是原本的 localhost
,所以必須把 phishURL
改成上線後的網址,這邊我想到兩個解決方法:
直接把扣改成 const phishURL = "https://phish-github.com"
,這種方法叫做 hard code,是最不用動腦的方法,改完就可以部署上去了,但這樣有個副作用就是開發時你就要再改回 http://localhost:8080
,一直改來改去
第二個方法是從 command line 設定參數讓使用者把 phishURL
傳進來,用起來像 go run main.go --phishURL=https://phish-github.com
,同一份扣可以開發也可以部署不用再改來改去,可配置程度高很多
這邊選用第二種方法,在 Go 裡面要讀取 command line 參數可以使用 flag,他是官方提供用來處理參數的 package
var phishURL string
func main() {
// 把 --phishURL=... 的值存進變數 phishURL 裡面
// 預設值是 "http://localhost:8080"
// "部署在哪個網域" 是這個參數的說明,自己看得懂就可以了
flag.StringVar(&phishURL, "phishURL", "http://localhost:8080", "部署在哪個網域")
flag.Parse()
db.Connect()
// ...
}
這樣就完成了用 command line 指定部署網址,因為預設值就是 http://localhost:8080
,所以開發時還是跑 go run main.go
就可以,部署的時候再跑 go run main.go --phishURL=https://phish-github.com
,如果哪天要換網域也不用改程式碼
監聽的 port 其實也有這個問題,之前為了開發都是監聽在 8080 port
func main() {
http.HandleFunc("/phish-admin", adminHandler)
http.HandleFunc("/", handler)
err := http.ListenAndServe(":8080", nil)
if err != nil {
panic(err)
}
}
但實際部署的時候應該要在預設的 HTTP port 80,這邊也是用一樣的解法,把 port 從 command line 讀進來,預設值設為開發時的 8080
var port string
func main() {
// ...
// 把 --port=... 的值存進變數 port 裡面
// 預設值是 ":8080"
flag.StringVar(&port, "port", ":8080", "部署在哪個 port")
flag.Parse()
err := http.ListenAndServe(port, nil)
}
部署的時候就直接 go run main.go --port=:80 --phishURL=https://phish-github.com
,很方便吧~
還記得剛剛用 flag 取值時都有加文字敘述嗎,編譯時 Go 會用他來生成使用說明,而且連預設值都有寫,真的很貼心 XD,以後我要寫 command line tool 大概都用 Go 寫了
今天用 flag 把 phishURL
跟 port
兩個變數改成可以配置的,這樣在開發跟部署時就可以用同一份扣,只要執行的時候加個參數就可以了。今天是最後一天寫扣了,Larry850806/go-phishing 這個 repo 是最後的完成品,覺得有趣的話不妨幫我按個星星,要開 issue 或是送 PR 也都很歡迎歐~
明天開始就是講部署的東西了,實作部分有任何問題都歡迎提出來~謝謝大家
很棒的系列文,學習了怎麼刻釣魚網站了XD用Python來學一個試試看
XD謝謝支持,懂原理之後任何語言應該都做得出來,只是我這邊是用 Go